const {app: electronApp} = require('electron');
const Log = require('ee-core/log');
const Conf = require('ee-core/config');

/**
 * 唤醒插件
 * @class
 */
class AwakenAddon {

    constructor() {
        this.protocol = '';
    }

    /**
     * 创建
     */
    create() {
        Log.info('[addon:awaken] load');

        const cfg = Conf.getValue('addons.awaken');
        this.protocol = cfg.protocol;

        electronApp.setAsDefaultProtocolClient(this.protocol);

        this.handleArgv(process.argv);
        electronApp.on('second-instance', (event, argv) => {
            if (process.platform === 'win32') {
                this.handleArgv(argv)
            }
        })

        // 仅用于macOS
        electronApp.on('open-url', (event, urlStr) => {
            this.handleUrl(urlStr)
        })
    }

    /**
     * 参数处理
     */
    handleArgv(argv) {
        const offset = electronApp.isPackaged ? 1 : 2;
        const url = argv.find((arg, i) => i >= offset && arg.startsWith(this.protocol));
        this.handleUrl(url)
    }

    /**
     * url解析
     */
    handleUrl(awakeUrlStr) {
        if (!awakeUrlStr || awakeUrlStr.length === 0) {
            return
        }
        const {hostname, pathname, search} = new URL(awakeUrlStr);
        let awakeUrlInfo = {
            urlStr: awakeUrlStr,
            urlHost: hostname,
            urlPath: pathname,
            urlParams: search && search.slice(1)
        }
        Log.info('[addon:awaken] awakeUrlInfo:', awakeUrlInfo);
    }
}

AwakenAddon.toString = () => '[class AwakenAddon]';
module.exports = AwakenAddon;
